home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-13 / mg2a_src.zip / MODES.C < prev    next >
C/C++ Source or Header  |  1988-08-23  |  3KB  |  139 lines

  1. /*
  2.  * Commands to toggle modes. Without an argument, toggle mode.
  3.  * Negitive or zero argument, mode off.     Positive argument, mode on.
  4.  */
  5.  
  6. #include "def.h"
  7. #include "kbd.h"
  8.  
  9. int defb_nmodes = 0;
  10. MAPS *defb_modes[PBMODES] = {&map_table[0]};
  11. int defb_flag = 0;
  12.  
  13. static int changemode(f, n, mode)
  14. int f, n;
  15. char *mode;
  16. {
  17.     register int i;
  18.     MAPS *m;
  19.     VOID upmodes();
  20.  
  21.     if((m = name_mode(mode)) == NULL) {
  22.     ewprintf("Can't find mode %s", mode);
  23.     return FALSE;
  24.     }
  25.     if(!(f & FFARG)) {
  26.     for(i=0; i <= curbp->b_nmodes; i++)
  27.         if(curbp->b_modes[i] == m) {
  28.         n = 0;            /* mode already set */
  29.         break;
  30.         }
  31.     }
  32.     if(n > 0) {
  33.     for(i=0; i <= curbp->b_nmodes; i++)
  34.         if(curbp->b_modes[i] == m) return TRUE;    /* mode already set */
  35.     if(curbp->b_nmodes >= PBMODES-1) {
  36.         ewprintf("Too many modes");
  37.         return FALSE;
  38.     }
  39.     curbp->b_modes[++(curbp->b_nmodes)] = m;
  40.     } else {
  41.     /* fundamental is b_modes[0] and can't be unset */
  42.     for(i=1; i <= curbp->b_nmodes && m != curbp->b_modes[i]; i++) {}
  43.     if(i > curbp->b_nmodes) return TRUE;        /* mode wasn't set */
  44.     for(; i < curbp->b_nmodes; i++)
  45.         curbp->b_modes[i] = curbp->b_modes[i+1];
  46.     curbp->b_nmodes--;
  47.     }
  48.     upmodes(curbp);
  49.     return TRUE;
  50. }
  51.  
  52. indentmode(f, n)
  53. {
  54.     return changemode(f, n, "indent");
  55. }
  56.  
  57. fillmode(f, n)
  58. {
  59.     return changemode(f, n, "fill");
  60. }
  61.  
  62. /*
  63.  * Fake the GNU "blink-matching-paren" variable.
  64.  */
  65. blinkparen(f, n)
  66. {
  67.     return changemode(f, n, "blink");
  68. }
  69.  
  70. #ifdef    NOTAB
  71. notabmode(f, n)
  72. {
  73.     if(changemode(f, n, "notab") == FALSE) return FALSE;
  74.     if(f & FFARG) {
  75.     if(n <= 0) curbp->b_flag &= ~BFNOTAB;
  76.     else curbp->b_flag |= BFNOTAB;
  77.     } else curbp->b_flag ^= BFNOTAB;
  78.     return TRUE;
  79. }
  80. #endif
  81.  
  82. overwrite(f, n)
  83. int f, n;
  84. {
  85.     if(changemode(f, n, "overwrite") == FALSE) return FALSE;
  86.     if(f & FFARG) {
  87.     if(n <= 0) curbp->b_flag &= ~BFOVERWRITE;
  88.     else curbp->b_flag |= BFOVERWRITE;
  89.     } else curbp->b_flag ^= BFOVERWRITE;
  90.     return TRUE;
  91. }
  92.  
  93. set_default_mode(f, n)
  94. int f, n;
  95. {
  96.     register int i;
  97.     register MAPS *m;
  98.     char mode[32];
  99.  
  100.     if(eread("Set Default Mode: ", mode, 32, EFNEW) != TRUE)
  101.         return ABORT;
  102.     if((m = name_mode(mode)) == NULL) {
  103.         ewprintf("can't find mode %s", mode);
  104.     return FALSE;
  105.     }
  106.     if(!(f & FFARG)) {
  107.     for(i=0; i <= defb_nmodes; i++)
  108.         if(defb_modes[i] == m) {
  109.         n = 0;            /* mode already set */
  110.         break;
  111.         }
  112.     }
  113.     if(n > 0) {
  114.     for(i=0; i <= defb_nmodes; i++)
  115.         if(defb_modes[i] == m) return TRUE;    /* mode already set */
  116.     if(defb_nmodes >= PBMODES-1) {
  117.         ewprintf("Too many modes");
  118.         return FALSE;
  119.     }
  120.     defb_modes[++defb_nmodes] = m;
  121.     } else {
  122.     /* fundamental is defb_modes[0] and can't be unset */
  123.     for(i=1; i <= defb_nmodes && m != defb_modes[i]; i++) {}
  124.     if(i > defb_nmodes) return TRUE;        /* mode wasn't set */
  125.     for(; i < defb_nmodes; i++)
  126.         defb_modes[i] = defb_modes[i+1];
  127.     defb_nmodes--;
  128.     }
  129.     if(strcmp(mode, "overwrite")==0)
  130.         if(n<=0) defb_flag &= ~BFOVERWRITE;
  131.     else defb_flag |= BFOVERWRITE;
  132. #ifdef NOTAB
  133.     if(strcmp(mode, "notab")==0)
  134.         if(n<=0) defb_flag &= ~BFNOTAB;
  135.     else defb_flag |= BFNOTAB;
  136. #endif
  137.     return TRUE;
  138. }
  139.